Many memory systems have the ability to generate a random number, which can be used, for example, to establish a secure communications link with another entity to securely transfer data to and/or from the memory system. Because various memory systems often use the same algorithm for generating a random number, in order to reduce the likelihood that memory systems will generate the same random number, memory systems can use different values (known as “seed values”) to initialize the random number generator. These seed values are preferably sufficiently unique, so that it is very unlikely that two memory systems will generate the same random number.
There are many techniques a memory system can use to generate a seed value. For example, the memory system can use one or more fast-running counters and sample the counter(s) at a random time or in response to an external event, where the sampled value of the fast-running counter(s) would be used as the seed value for the random number generator. As another example, a seed value can be generated based on dynamic memory blocks with iterative logic. In one implementation of this, the memory system can retrieve a first data block and derive a random address from the first data block, which is used to retrieve a second data block and so on, with the iteration continuing until a sufficiently-randomized seed value is determined. As yet another example, the memory system can generate entropy bits by comparing two values retrieved from any storage locations, like memory cells, registers, or clocks (e.g., comparing the number of bits with value 1 or determining whether is a first read value is greater or lesser than a second read value). The entropy bits can be aggregated on similar multiple comparisons until all the bits of the seed value are generated. As yet another example, the memory system can probe analog signals, such as oscillating frequency circuits or noise levels, having a random analog value at the time the signal is sampled. For stronger non-repeatability, the analog signals can be monitored at multiple instances to generate an array of values, which can then be used to derive a composite seed value based on some mathematical functions or simple logical aggregation. As another example, the memory system can use dedicated sensors to probe physical parameters, such as temperature and light intensity, to generate a seed value.